package logique.preferences;

import java.util.ArrayList;
import java.util.LinkedList;

import logique.reseau.Ville;

/**
 * 
 * @author camille
 *
 */
public class PreferencesUtilisateur {
	private Ville villeDepart;
	private Ville villeArrivee;

	private CritereItineraire critereItineraire;
	private CritereEtapes etapesObligatoires;
	private CritereEtapes etapesInterdites;

	private LinkedList<CritereVille> criteresVilles;
	private LinkedList<CritereTroncon> criteresTroncons;

	private ArrayList<Critere> criteres;

	public PreferencesUtilisateur() {
		villeDepart = null;
		villeArrivee = null;

		critereItineraire = null;

		etapesObligatoires = new CritereEtapes(true);
		etapesInterdites = new CritereEtapes(false);

		criteres = new ArrayList<Critere>();
		criteresVilles = new LinkedList<CritereVille>();
		criteresTroncons = new LinkedList<CritereTroncon>();
	}

	public Ville getVilleDepart() {
		return villeDepart;
	}

	public void setVilleDepart(Ville villeDepart) {
		this.villeDepart = villeDepart;
	}

	public Ville getVilleArrivee() {
		return villeArrivee;
	}

	public void setVilleArrivee(Ville villeArrivee) {
		this.villeArrivee = villeArrivee;
	}

	public CritereItineraire getCritereItineraire() {
		return critereItineraire;
	}

	public void setCritereItineraire(CritereItineraire critereItineraire) {
		this.critereItineraire = critereItineraire;
	}

	public CritereEtapes getEtapesObligatoires() {
		return etapesObligatoires;
	}

	public void addEtapeObligatoire(Ville ville) {
		this.etapesObligatoires.addEtape(ville);
	}

	public CritereEtapes getEtapesInterdites() {
		return etapesInterdites;
	}

	public void addEtapeInterdite(Ville ville) {
		this.etapesInterdites.addEtape(ville);
	}

	public LinkedList<CritereVille> getCriteresVilles() {
		return criteresVilles;
	}

	public void addCritereVille(CritereVille critereVille) {
		this.criteresVilles.add(critereVille);
		criteres.add(critereVille);
	}

	public LinkedList<CritereTroncon> getCriteresTroncons() {
		return criteresTroncons;
	}

	public void addCritereTroncon(CritereTroncon critereTroncon) {
		this.criteresTroncons.add(critereTroncon);
		criteres.add(critereTroncon);
	}

	public ArrayList<Critere> getCriteres() {
		return criteres;
	}
	
	public String toString(){
		StringBuffer buf = new StringBuffer();
		buf.append("Depart : " + villeDepart + " - Arrivée : " + villeArrivee +"\n");
		for (Ville etape : etapesObligatoires.getEtapes()) {
			buf.append(etape + " ");
		}
		return buf.toString();
	}
}
